package string;

public class Demo04 {
    public static final String S = "ABC";
    public static void main(String[] args) {

        //java 在第一次创建 静态字符串“ABC”，会将其引用存储到字符串常量池中一份

        String s1 = "ABC";

        //第二次遇到“ABC”时候就不在创建新对象，而是从常量池中获取原有的“ABC”的引用，赋值给s2
        //也就是说s1 和 s2（复用）引用了同一个对象
        String s2 = "ABC";
        //利用s1==s2,检查s1和s2是否引用了同一个对象
        System.out.println(s1==s2);
        //使用new运算创建的字符串，是动态字符串，不会放到常量池,不会被复用
        String s3 = new String("ABC");
        System.out.println(s1==s3);
        System.out.println(S==s1);

        String s4="AB"+"C";
        String s6= "AB";
        String s7= "C";
        String s8= s6+s7;
        System.out.println(s1 == s4);
        System.out.println(s1 == s8);

    }
}
/*
       new String("ABC")创建了几个字符串对象
       1.Java 首先创建静态字符串对象
            这个静态字符串的引用被缓存到常量池
       2.然后利用静态字符串作为参数创建一个
            动态字符串 new String(...)



 */